﻿Imports Microsoft.DirectX.Direct3D
Imports Microsoft.DirectX
''' <summary>
''' Zeigt die Aufzeichnungsbuttons an zum Vor- und Zurueckspulen.
''' und verarbeitet die Eingaben fuer sie...
''' </summary>
''' <remarks></remarks>
Public Class RekordSpielInfoAnzeige
    Enum ButtonTexturenNamen
        _Play
        _Break
        _Stop
        _Backward
        _Forward
        _RecordBalken
    End Enum
    Dim ButtonTexturen(5) As Texture
    Public Const Hoehe As Integer = 60
    Const TexturenHoeheBreite As Integer = 30
    Const ButtonZwischenPlatz As Integer = 10
    Const SpulFrames As Integer = 3
    Const RecordBalkenbreite As Integer = 17
    Private Spulrichtung As Integer = 0
    Private Spulveraenderung As Integer = 0

    Private MovingRecordPosition As Integer = -1

    Dim Font As Integer

    Dim CB As ObjektCheckBox
    Dim Beenden As ObjektButton
    Public Sub New()
        ButtonTexturen(0) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\PlayButton.png")
        ButtonTexturen(1) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\BreakButton.png")
        ButtonTexturen(2) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\StopButton.png")
        ButtonTexturen(3) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\BackwardButton.png")
        ButtonTexturen(4) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\ForwardButton.png")
        ButtonTexturen(5) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\Recordbalken.png")
        Font = Schriftengine.CreateSchriftart(Schriftengine.Schriftarten.Arial, 12, FontStyle.Regular)
        Grafikengine.Sprite.Transform = Matrix.Identity
        Dim PX As Integer = 20 + Schriftengine.Fonts(Font).Schrift.MeasureString(Grafikengine.Sprite, "Fixed", DrawTextFormat.None, Color.Black).Width

        CB = New ObjektCheckBox(New Point(PX, DataSettings.BildschirmHoehe - Hoehe / 2), "CheckBox", New PointF(0, 1), False)
        Beenden = New ObjektButton(100, DataSettings.BildschirmHoehe - 30, DataSettings.Resourcenpfad + "Objects\Button.png", "Beenden", New PointF())
    End Sub

    Public Sub Dispose()
        For I = 0 To ButtonTexturen.Length - 1
            ButtonTexturen(I).Dispose()
        Next
        CB.RemoveHandles()
        ReDim ButtonTexturen(-1)
        Grafikengine.Grafikkarte.EvictManagedResources()
    End Sub

    Public Sub MouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
        CB.MouseDown(Nothing, e)
        Beenden.MouseDown(Nothing, e)
        Dim ButtonRechteck As New Rectangle(DataSettings.BildschirmBreite / 2 - TexturenHoeheBreite / 2 - TexturenHoeheBreite * 2 - 2 * ButtonZwischenPlatz, DataSettings.BildschirmHoehe - Hoehe / 2 - TexturenHoeheBreite / 2, TexturenHoeheBreite, TexturenHoeheBreite)
        If ButtonRechteck.Contains(e.Location) Then
            'Stop Button
            Hauptmenue.AufzeichnungsPause = True
            Hauptmenue.RestartAufzeichnungAbspielen()
        Else
            ButtonRechteck.X += TexturenHoeheBreite + ButtonZwischenPlatz
            If ButtonRechteck.Contains(e.Location) Then
                'Zurueckspulen
                Spulrichtung = -1
            Else
                ButtonRechteck.X += TexturenHoeheBreite + ButtonZwischenPlatz
                If ButtonRechteck.Contains(e.Location) Then
                    'Pause oder Abspielen
                    Hauptmenue.AufzeichnungsPause = Not Hauptmenue.AufzeichnungsPause
                Else
                    ButtonRechteck.X += TexturenHoeheBreite + ButtonZwischenPlatz
                    If ButtonRechteck.Contains(e.Location) Then
                        'Vorspulen
                        Spulrichtung = 1
                    Else
                        ButtonRechteck = New Rectangle(15, DataSettings.BildschirmHoehe - Hoehe + 1, DataSettings.BildschirmBreite - 36, 9)
                        If ButtonRechteck.Contains(e.Location) Then
                            'Recordbalken
                            MovingRecordPosition = Hauptmenue.RecordPosition
                        End If
                    End If
                End If
            End If
        End If
    End Sub
    Public Sub MouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
        Beenden.MouseEnter(Nothing, e)
        If MovingRecordPosition >= 0 Then
            MovingRecordPosition = ((e.X - 18) / (DataSettings.BildschirmBreite - 36)) * Hauptmenue.MaxRecordPosition
            If MovingRecordPosition < 0 Then MovingRecordPosition = 0
            If MovingRecordPosition > Hauptmenue.MaxRecordPosition Then MovingRecordPosition = Hauptmenue.MaxRecordPosition
        End If
    End Sub
    Public Sub MouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim F As String = Beenden.MouseUp(Nothing, e)
        If F <> "" Then
            Hauptmenue.AufzeichnungAbspielenThreadBeenden()
            Hauptmenue.Ini(Hauptmenue.Formmodi.Hauptmenue)
            Exit Sub
        End If
        CB.MouseUp(Nothing, e)
        If Spulrichtung <> 0 Then
            'Spulen Ende
            Spulrichtung = 0
            Hauptmenue.GotoRecordPosition(Hauptmenue.RecordPosition + Spulveraenderung)
        End If
        If MovingRecordPosition >= 0 Then
            Hauptmenue.GotoRecordPosition(MovingRecordPosition)
            MovingRecordPosition = -1
        End If
    End Sub

    Public Sub Malen()
        If CB.Checked Or ObjektMaus.YKoordinate >= DataSettings.BildschirmHoehe - Hoehe Then

            'Hintergrund malen
            Grafikengine.fillRect(New Rectangle(0, DataSettings.BildschirmHoehe - Hoehe / 6 * 1, DataSettings.BildschirmBreite, Hoehe / 5), Color.FromArgb(255, 128, 128, 128))
            Grafikengine.fillRect(New Rectangle(0, DataSettings.BildschirmHoehe - Hoehe / 6 * 2, DataSettings.BildschirmBreite, Hoehe / 5), Color.FromArgb(255, 132, 132, 132))
            Grafikengine.fillRect(New Rectangle(0, DataSettings.BildschirmHoehe - Hoehe / 6 * 3, DataSettings.BildschirmBreite, Hoehe / 5), Color.FromArgb(255, 136, 136, 136))
            Grafikengine.fillRect(New Rectangle(0, DataSettings.BildschirmHoehe - Hoehe / 6 * 4, DataSettings.BildschirmBreite, Hoehe / 5), Color.FromArgb(255, 140, 140, 140))
            Grafikengine.fillRect(New Rectangle(0, DataSettings.BildschirmHoehe - Hoehe / 6 * 5, DataSettings.BildschirmBreite, Hoehe / 5), Color.FromArgb(255, 144, 144, 144))
            Grafikengine.fillRect(New Rectangle(0, DataSettings.BildschirmHoehe - Hoehe / 6 * 6, DataSettings.BildschirmBreite, Hoehe / 5), Color.FromArgb(255, 148, 148, 148))
            Grafikengine.fillRect(New Rectangle(0, DataSettings.BildschirmHoehe - Hoehe, DataSettings.BildschirmBreite, 1), Color.Black)
            Dim Mitte As New Point(DataSettings.BildschirmBreite / 2, DataSettings.BildschirmHoehe - Hoehe / 2)

            'Buttons malen
            Dim T As Texture
            If Hauptmenue.AufzeichnungsPause Then
                T = ButtonTexturen(ButtonTexturenNamen._Play)
            Else
                T = ButtonTexturen(ButtonTexturenNamen._Break)
            End If
            Dim Pos As Point = Mitte
            Grafikengine.Draw2D(T, Pos, Nothing, New Point(TexturenHoeheBreite / 2, TexturenHoeheBreite / 2), 0, Color.White)
            Pos.X = Mitte.X - TexturenHoeheBreite - ButtonZwischenPlatz
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._Backward), Pos, Nothing, New Point(TexturenHoeheBreite / 2, TexturenHoeheBreite / 2), 0, Color.White)
            Pos.X = Mitte.X + TexturenHoeheBreite + ButtonZwischenPlatz
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._Forward), Pos, Nothing, New Point(TexturenHoeheBreite / 2, TexturenHoeheBreite / 2), 0, Color.White)
            Pos.X = Mitte.X - TexturenHoeheBreite * 2 - ButtonZwischenPlatz * 2
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._Stop), Pos, Nothing, New Point(TexturenHoeheBreite / 2, TexturenHoeheBreite / 2), 0, Color.White)

            'Recordbalkenmalen
            '15 Rand aufjeder Seite und 3 fuer den Endbalken.
            Dim Breite As Integer = DataSettings.BildschirmBreite - 36
            Dim Start As Point = New Point(15, DataSettings.BildschirmHoehe - Hoehe + 5)
            'Start des Balken
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._RecordBalken), Start, New Rectangle(0, 0, 3, 4), New Point, 0, Color.White)
            'Mittelteil gefuellt
            Dim Fuellgroesse As Integer
            If MovingRecordPosition < 0 Then
                Fuellgroesse = (Breite * Hauptmenue.RecordPosition / Hauptmenue.MaxRecordPosition)
            Else
                Fuellgroesse = (Breite * MovingRecordPosition / Hauptmenue.MaxRecordPosition)
            End If
            Start.X += 3
            Dim R As Integer
            Dim Anzahl As Integer = Math.DivRem(Fuellgroesse, RecordBalkenbreite, R)
            For I = 0 To Anzahl - 1
                Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._RecordBalken), Start, New Rectangle(3, 0, RecordBalkenbreite, 4), New Point, 0, Color.White)
                Start.X += RecordBalkenbreite
            Next
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._RecordBalken), Start, New Rectangle(3, 0, R, 4), New Point, 0, Color.White)
            Start.X += R
            Dim ButtonX As Integer = Start.X
            'Mittelteil leer
            Fuellgroesse = Breite - Fuellgroesse
            Anzahl = Math.DivRem(Fuellgroesse, RecordBalkenbreite, R)
            For I = 0 To Anzahl - 1
                Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._RecordBalken), Start, New Rectangle(3 + RecordBalkenbreite, 0, RecordBalkenbreite, 4), New Point, 0, Color.White)
                Start.X += RecordBalkenbreite
            Next
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._RecordBalken), Start, New Rectangle(3 + RecordBalkenbreite, 0, R, 4), New Point, 0, Color.White)
            Start.X += R
            'Ende des Balken.
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._RecordBalken), Start, New Rectangle(37, 0, 3, 4), New Point, 0, Color.White)
            'Cursor malen
            Start.X = ButtonX
            Grafikengine.Draw2D(ButtonTexturen(ButtonTexturenNamen._RecordBalken), Start, New Rectangle(40, 0, 16, 9), New Point(8, 4), 0, Color.White)
            'Text Anzeigen
            Dim RecordPos As Integer = Hauptmenue.RecordPosition
            If MovingRecordPosition >= 0 Then RecordPos = MovingRecordPosition
            Dim Text As String = RecordPos.ToString + "/" + Hauptmenue.MaxRecordPosition.ToString
            Grafikengine.Sprite.Transform = Matrix.Identity
            Dim W As Integer = Schriftengine.Fonts(Font).Schrift.MeasureString(Grafikengine.Sprite, Text, DrawTextFormat.None, Color.Black).Width
            Start = New Point(DataSettings.BildschirmBreite - W - 10, DataSettings.BildschirmHoehe - Hoehe / 2)
            Schriftengine.DrawTextZeile(Text, Start, Font, Color.Black)
            CB.Malen()
            Beenden.Malen()
            Schriftengine.DrawTextZeile(Sprachconverter.Translate("Fest"), New Point(10, DataSettings.BildschirmHoehe - Hoehe / 2), Font, Color.Black)
        End If
        'Updates
        If Spulrichtung <> 0 Then
            Spulveraenderung += (SpulFrames * Spulrichtung)
            If Spulveraenderung + Hauptmenue.RecordPosition < 0 Then Spulveraenderung = -Hauptmenue.RecordPosition
            If Spulveraenderung > Hauptmenue.MaxRecordPosition - Hauptmenue.RecordPosition Then Spulveraenderung = Hauptmenue.MaxRecordPosition - Hauptmenue.RecordPosition
        End If

        ObjektMaus.Visible = True
    End Sub
End Class
